home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1993 / 04_93_2.dms / 04_93_2.adf / Geheimnisvolles OS 2.0 / OS 2.0.asm next >
Assembly Source File  |  1993-03-24  |  8KB  |  315 lines

  1. * WB-Beispielprogramm für DevPac II
  2.  
  3. TAG_USER   equ        $80000000
  4.     opt        a+,o+,p+
  5. Start move.l     4.w,a6
  6.     lea        IntName,a1
  7.     * OS 2.0 oder höher
  8.     moveq      #37,d0
  9.     jsr        -552(a6)
  10.     lea        IntBase,a0
  11.     move.l     d0,(a0)
  12.     * Kein OS 2.x
  13.     beq        No_OS2
  14.     lea        GfxName,a1
  15.     * jsr OldOpenLib
  16.     jsr        -408(a6)
  17.     lea        GfxBase,a0
  18.     move.l     d0,(a0)
  19.     lea        GadName,a1
  20.     * jsr OldOpenLib
  21.     jsr        -408(a6)
  22.     lea        GadBase,a0
  23.     move.l     d0,(a0)
  24.     move.l     IntBase,a6
  25.     lea        PupScreen,a0
  26.     * LockPupScreen
  27.     jsr        -510(a6)
  28.     lea        Screen,a0
  29.     move.l     d0,(a0)
  30.     * Kein Screen
  31.     beq        No_Screen
  32.     move.l     d0,a0
  33.     * GetScreenDrawInfo
  34.     jsr        -690(a6)
  35.     lea        DrawInfo,a0
  36.     move.l     d0,(a0)
  37.     move.l     d0,a1
  38.     move.l     8(a1),a1
  39.     lea        Font,a0
  40.     * dri_Font
  41.     move.l     a1,(a0)
  42.     lea        YSize,a0
  43.     * tf_YSize
  44.     move.w     20(a1),(a0)
  45.     lea        BaseLine,a0
  46.     * tf_BaseLine
  47.     move.w     26(a1),(a0)
  48.     move.w     YSize,d0
  49.     lsl.w      #1,d0
  50.     addq.w     #8,d0
  51.     lea        WA_InnerHeight+6,a0
  52.     * Innere Höhe
  53.     move.w     d0,(a0)
  54.     lea        Text_1,a0
  55.     bsr        GetTextLenght
  56.     * Pixelbreite Text 1
  57.     move.l     d0,d1
  58.     lea        Text_2,a0
  59.     bsr        GetTextLenght
  60.     * Welcher Text ist breiter ?
  61.     cmp.w      d0,d1
  62.     blt.s      .Width_Ok
  63.     move.w     d1,d0
  64. .Width_Ok  addq.w     #8,d0
  65.     lea        WA_InnerWidth+6,a0
  66.     * Innere Breite
  67.     move.w     d0,(a0)
  68.     move.l     Screen,a1
  69.     lea        WindowData,a0
  70.     * TopEdge
  71.     move.b     30(a1),3(a0)
  72.     addq.b     #1,3(a0)
  73.     lea        WindowTags,a1
  74.     * OpenWindowTagList
  75.     jsr        -606(a6)
  76.     lea        Window,a0
  77.     move.l     d0,(a0)
  78.     beq        No_Window
  79.     move.l     d0,a1
  80.     lea        RastPort,a0
  81.     * RastPort des Fensters
  82.     move.l     50(a1),(a0)
  83.     lea        MessagePort,a0
  84.     * MsgPort des Fensters
  85.     move.l     86(a1),(a0)
  86.     * Menü einrichten
  87.     move.l     GadBase,a6
  88.     lea        NewMenu,a0
  89.     lea        NewMenuTags,a1
  90.     * CreateMenusA
  91.     jsr        -48(a6)
  92.     lea        Menu,a0
  93.     move.l     d0,(a0)
  94.     beq        No_Menu
  95.     move.l     Screen,a0
  96.     sub.l      a1,a1
  97.     * GetVisualInfoA
  98.     jsr        -126(a6)
  99.     lea        VisualInfo,a0
  100.     move.l     d0,(a0)
  101.     move.l     Menu,a0
  102.     move.l     VisualInfo,a1
  103.     lea        NewMenuTags,a2
  104.     * LayoutMenusA
  105.     jsr        -66(a6)
  106.     tst.l      d0
  107.     beq        No_Layout
  108.     move.l     IntBase,a6
  109.     move.l     Window,a0
  110.     move.l     Menu,a1
  111.     * SetMenuStrip
  112.     jsr        -264(a6)
  113.     * Font setzen und Text ausgeben
  114.     move.l     Font,a0
  115.     move.l     RastPort,a1
  116.     move.l     GfxBase,a6
  117.     * SetFont
  118.     jsr        -66(a6)
  119.     move.l     Window,a1
  120.     * Text X-Pos, Y-Pos
  121.     moveq      #0,d0
  122.     moveq      #0,d1
  123.     * LeftBorder, TopBorder
  124.     move.b     54(a1),d0
  125.     move.b     55(a1),d1
  126.     * plus Font Basislinie
  127.     add.w      BaseLine,d1
  128.     * plus 2 x 4 Pixel
  129.     addq.w     #4,d0
  130.     addq.w     #4,d1
  131.     bsr        Move
  132.     move.l     DrawInfo,a2
  133.     * dri_Pens
  134.     move.l     4(a2),a2
  135.     * hilighttextPen
  136.     move.w     16(a2),d2
  137.     bsr        SetPen
  138.     lea        Text_1,a0
  139.     bsr        PrintText
  140.     add.w      YSize,d1
  141.     bsr        Move
  142.     move.w     4(a2),d2
  143.     bsr        SetPen
  144.     lea        Text_2,a0
  145.     bsr        PrintText
  146. Wait       move.l     4.w,a6
  147.     * Wait wegen Multitasking
  148.     moveq      #-1,d0
  149.     jsr        -318(a6)
  150. .NextMsg
  151.     move.l     MessagePort,a0
  152.     jsr        -372(a6)
  153.     tst.l      d0
  154.     beq.s      Wait
  155.     move.l     d0,a1
  156.     move.l     20(a1),d2
  157.     move.w     24(a1),d3
  158.     jsr        -378(a6)
  159.     * CloseGadget ?
  160.     cmp.l      #$200,d2
  161.     beq.s      Ende
  162.     * Menu ?
  163.     cmp.l      #$100,d2
  164.     bne.s      .NextMsg
  165.     * 3. Punkt im 1. Menu ?
  166.     cmp.b      #$40,d3
  167.     bne.s      .NextMsg
  168. Ende
  169.     * Ok, kein Fehler
  170.     moveq      #0,d7
  171. Err_Layout
  172.     * Alles freigeben...
  173.     move.l     GadBase,a6
  174.     move.l     Menu,a0
  175.     jsr        -54(a6)
  176.     move.l     VisualInfo,a0
  177.     * FreeVisualInfo
  178.     jsr        -132(a6)
  179. Err_Menu   move.l     IntBase,a6
  180.     move.l     Window,a0
  181.     jsr        -72(a6)
  182. Err_Window move.l     IntBase,a6
  183.     move.l     Screen,a0
  184.     move.l     DrawInfo,a1
  185.     * FreeDrawInfo
  186.     jsr        -696(a6)
  187.     sub.l      a0,a0
  188.     move.l     Screen,a1
  189.     * UnlockPubScreen
  190.     jsr        -516(a6)
  191. Err_Screen move.l     4.w,a6
  192.     move.l     GadBase,a1
  193.     jsr        -414(a6)
  194.     move.l     GfxBase,a1
  195.     jsr        -414(a6)
  196.     move.l     IntBase,a1
  197.     jsr        -414(a6)
  198. Err_OS2    move.l     d7,d0
  199.     * Fehlercode
  200.     rts
  201. *-------------------------------
  202. No_OS2     moveq      #-10,d7
  203.     bra.s      Err_OS2
  204. No_Screen  moveq      #-10,d7
  205.     bra.s      Err_Screen
  206. No_Window  moveq      #-10,d7
  207.     bra.s      Err_Window
  208. No_Menu    moveq      #-10,d7
  209.     bra.s      Err_Menu
  210. No_Layout  moveq      #-10,d7
  211.     bra.s      Err_Layout
  212. *---------------------
  213. GetTextLenght
  214.     movem.l    d1/a0-a2/a6,-(sp)
  215.     move.l     a0,a2
  216.     move.l     Screen,a1
  217.     * RastPort
  218.     lea        84(a1),a1
  219.     moveq      #-1,d0
  220. .loop      addq.l     #1,d0
  221.     tst.b      (a2)+
  222.     bne.s      .loop
  223.     move.l     GfxBase,a6
  224.     * TextLenght
  225.     jsr        -54(a6)
  226.     movem.l    (sp)+,d1/a0-a2/a6
  227.     rts
  228. *---------------------
  229. PrintText
  230.     movem.l    d0-d1/a0-a2/a6,-(sp)
  231.     move.l     a0,a2
  232.     move.l     RastPort,a1
  233.     moveq      #-1,d0
  234. .loop      addq.l     #1,d0
  235.     tst.b      (a2)+
  236.     bne.s      .loop
  237.     move.l     GfxBase,a6
  238.     * Text
  239.     jsr        -60(a6)
  240.     movem.l    (sp)+,d0-d1/a0-a2/a6
  241.     rts
  242. *---------------------
  243. SetPen
  244.     movem.l    d0-d1/a0-a1/a6,-(sp)
  245.     move.w     d2,d0
  246.     move.l     RastPort,a1
  247.     move.l     GfxBase,a6
  248.     * SetAPen
  249.     jsr        -342(a6)
  250.     movem.l    (sp)+,d0-d1/a0-a1/a6
  251.     rts
  252. *---------------------
  253. Move
  254.     movem.l    d0-d1/a0-a1/a6,-(sp)
  255.     move.l     RastPort,a1
  256.     move.l     GfxBase,a6
  257.     * Move
  258.     jsr        -240(a6)
  259.     movem.l    (sp)+,d0-d1/a0-a1/a6
  260.     rts
  261. *-------------------------------
  262.     opt        p-
  263. IntBase       dc.l    0
  264. GfxBase       dc.l    0
  265. GadBase       dc.l    0
  266. RastPort      dc.l    0
  267. MessagePort   dc.l    0
  268. DrawInfo      dc.l    0
  269. VisualInfo    dc.l    0
  270. Font          dc.l    0
  271. Menu          dc.l    0
  272. Window        dc.l    0
  273. YSize         dc.w    0
  274. BaseLine      dc.w    0
  275. WindowData    dc.w    0,0,0,0,1
  276.               dc.l    $300,$2100f,
  277.               dc.l    0,0,WindowName
  278. Screen        dc.l    0,0
  279.               dc.w    0,0,-1,-1,15
  280. WindowTags    dc.l    TAG_USER+147,1
  281. WA_InnerWidth dc.l    TAG_USER+118,0
  282. WA_InnerHeight dc.l   TAG_USER+119,0
  283.                dc.l   0
  284. NewMenu       dc.b    1,0
  285.               dc.l    MenuTitle_1,0
  286.               dc.w    0
  287.               dc.l    0,0
  288.               dc.b    2,0
  289.               dc.l    MenuPoint_1,T_Key
  290.               dc.w    $109
  291.               dc.l    0,0
  292.               dc.b    2,0
  293.               dc.l    -1,0
  294.               dc.w    0
  295.               dc.l    0,0
  296.               dc.b    2,0
  297.               dc.l    MenuPoint_3,V_Key
  298.               dc.w    0
  299.               dc.l    0,0,0
  300. NewMenuTags   dc.l    TAG_USER+$80043,1
  301.               dc.l    0
  302. IntName       dc.b    'intuition.library',0
  303. GfxName       dc.b    'graphics.library',0
  304. GadName       dc.b    'gadtools.library',0
  305. PupScreen     dc.b    'Workbench',0
  306. WindowName    dc.b    'Testfenster',0
  307. MenuTitle_1   dc.b    'Projekt',0
  308. MenuPoint_1   dc.b    'Test',0
  309. MenuPoint_3   dc.b    'Verlassen',0
  310. Text_1        dc.b    'Nicht vergessen:',0
  311. Text_2        dc.b    'Die WB ist unberechenbar...',0
  312. T_Key         dc.b    'T',0
  313. V_Key         dc.b    'V',0
  314.               END
  315.